Synchronizer circuits are used to transition data between different clock domains in an electronic device. For example, a Multiple Clock Domain (MCD) device may use synchronizer circuits to transition data between respective clock domains. An example of an MCD device is a Globally Asynchronous Locally Synchronous (GALS) System on a Chip (SoC), in which different parts of the chip operate at different frequencies, yet communicate with each other. Another example is a processor in which high-clock-rate processor cores communicate with slower cores and/or even slower memory. Still other examples are possible.
Synchronizer circuits suffer from metastability. When a clock of a receiving clock domain rises while data in a data line between a transmitting clock domain and a synchronizer circuit in the receiving clock domain is transitioning, a metastable state may potentially be generated. The metastable state causes an output value of neither high nor low, effectively corrupting the data and causing any logic after the synchronizer circuit in the receiving clock domain to produce incorrect results.